home *** CD-ROM | disk | FTP | other *** search
/ Amiga Game-Power / Amiga Game-Power.iso / anwendungen / gw print / bcpl / bcpllib.c < prev    next >
C/C++ Source or Header  |  1994-05-20  |  2KB  |  74 lines

  1. /* bcpllib.c - An interface between C programs and BCPL
  2. Compile with Manx 3.4:
  3. cc bcpllib
  4. By Bill Kinnersley - Dec 18, 1987
  5. Mail:   Physics Dept.
  6.         Montana State University
  7.         Bozeman, MT 59717
  8. BITNET: iphwk@mtsunix1
  9. INTERNET: iphwk%mtsunix1.bitnet@cunyvm.cuny.edu
  10. UUCP: ...psuvax1!mtsunix1.bitnet!iphwk
  11. */
  12. #include <libraries/dosextens.h>
  13. #include <functions.h>
  14. #include <exec/memory.h>
  15. long a0[3], *a1, *a, b[500];
  16. BCPLInit() {
  17.         struct DosLibrary *doslib;
  18.         struct Task *mytask;
  19.         long *splower;
  20.         doslib = (struct DosLibrary *)OpenLibrary("dos.library",0L);
  21. /*      mytask = FindTask(0L);
  22.         splower = (long *)mytask->tc_SPLower;
  23.         printf("splower = %lx\n",splower);*/
  24.         a0[0] = doslib->dl_A2;
  25.         a0[1] = doslib->dl_A5;
  26.         a0[2] = doslib->dl_A6;
  27.         a1 = (long *)AllocMem(2000L,MEMF_CLEAR);
  28.         /*splower; a1+=200;*/
  29.         a = &a1[3];
  30. }
  31. BCPLQuit() {
  32.         FreeMem(a1,2000L);
  33. }
  34. long BCPL(n) long n; {
  35. #asm
  36. ;       move.l  8(a7),d0
  37.         movem.l d4-d7/a2-a5,-(a7)
  38.         movea.l a7,a0
  39.         adda.l  #40,a0
  40.         movem.l (a0),d0-d4
  41.         adda.l  #4,a0
  42.         movea.l _a,a1
  43.         moveq   #9,d5
  44. l1:     move.l  (a0)+,(a1)+
  45.         dbf     d5,l1
  46. ;       movea.l _a,a1
  47. ;       movem.l (a1),d1-d4
  48.         movea.l _a1,a1
  49.         lea     _a0,a0
  50.         movem.l (a0)+,a2/a5-a6
  51.         suba.l  a0,a0
  52.         move.l  0(a2,d0.l),a4
  53.         moveq   #$c,d0
  54.         jsr     (a5)
  55.         move.l  d1,d0
  56.         movem.l (a7)+,d4-d7/a2-a5
  57. #endasm
  58. }
  59. BPTR MakeBSTR(s) char *s; {
  60.         long len;
  61.         char *bs;
  62.         len = (long)strlen(s);
  63.         bs = (char *)AllocMem(len+2L,MEMF_CLEAR);
  64.         if (!bs) {printf("Can't allocate\n"); exit(0);}
  65.         bs[0] = len;
  66.         strcpy(&bs[1], s);
  67.         return ((long)bs)>>2;
  68. }
  69. FreeBSTR(bs) long bs; {
  70.         char *s;
  71.         s = (char *)BADDR(bs);
  72.         FreeMem(s,(long)(*s)+2L);
  73. }
  74.